package com.weasel.weixin.commons.message.handler;

import com.weasel.helper.OSMonitor;
import com.weasel.weixin.commons.message.bean.WeixinPostEventXmlMessage;
import org.apache.commons.lang.StringUtils;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**用于处理消息
 * Created by Dylan on 2015/10/9.
 */
public abstract class AbstractWeixinPostEventXmlMessageHandler {

    protected ExecutorService threads = Executors.newFixedThreadPool(OSMonitor.cpus());


    /**
     *用户自定义处理业务逻辑
     * @param message 事件消息
     * @return  返回类型是为了用户处理完业务后方便返回数据，如果没有数据需要返回，可返回null;
     */
    protected abstract void handler(final WeixinPostEventXmlMessage message);

    /**
     *用户自定义处理类所处理的事件类型
     * @return
     */
    protected abstract EventType handlerEventType();

    /**
     *
     * @param message
     * @return
     */
    public void doHandler(final WeixinPostEventXmlMessage message){

        if(null != handlerEventType() && StringUtils.equals(handlerEventType().getEventType(),message.getEvent())){
           handler(message);
        };
    }

    public static enum EventType{

        SUBSCRIBE("subscribe"),  //用户未关注时开始关注事件
        UNSUBSCRIBE("unsubscribe"), //用户取消关注事件
        SCAN("SCAN"),   //用户已关注时又关注事件
        LOCATION("LOCATION"), //上件地理位置事件
        CLICK("CLICK"),  //点击自定义菜单拉取消息事件
        VIEW("VIEW");  //点击自定义菜单为view类型事件

        private String eventType;

        EventType(String eventType) {
            this.eventType = eventType;
        }

        public String getEventType() {
            return eventType;
        }

    }


}

